package linz

/**
 *
 */
fun main() {
//    simpleOperation()
    arrayDemo()
}

/**
 * 简单操作
 */
fun simpleOperation(){
    val list = mutableListOf("1", "2", "3")
    list += "4"
    list -= "1"

    list.removeIf{
        it.contains("1") //删除所有 condition 返回true的内容
    }

    //todo List 遍历三种方法

    for (s in list) {
        println("元素:$s")
    }
    println()

    list.forEach{
        println("元素:$it")
    }

    println()
    list.forEachIndexed { index, s ->
        println("下标：$index, 元素：$s")
    }

    //todo 解构过滤元素

    val listOf = listOf("小名", "小红", "小强")
    //不能改变解构
    val (value1, value2, value3) = listOf
    println("value1:$value1 value2:$value2 value3:$value3")

    //可以改变
    var (v1, v2, v3) = listOf
    v1= "阿强"
    println("v1:$v1 v2:$v2 v3:$v3")

    //过滤
    val (_, n1, n2) = listOf
    println("n1:$n1 n2:$n2")


}

/**
 * 可变不可变
 */
fun mutable(){
    //可变
    val list = mutableListOf("1", "2", "3")
    //可变==> 不可变
    val toList = list.toList()
    //不可变
    val listOf = listOf(1, 3, 4, 6)
    // 不可变 ==> 可变
    val toMutableList = listOf.toMutableList()
}


/**
 * list 获取内容越界异常
 */
fun overLimit(){
    val list = listOf("Derry", "Alice", "William", "Joe")

    println(list[0])
    println(list[1])
    println(list[2])
    println(list[3])
//  println(list[4]) //异常

    println(list.getOrElse(5) { "越界了亲!!" })
    println(list.getOrNull(123231) ?: "越界了亲!!")
}


//-----------------------------------

fun setOverLimit(){
    val set = setOf("Derry", "Alice", "William", "Joe","Joe")

    println(set.elementAt(0))
    println(set.elementAt(1))
    println(set.elementAt(2))
//    println(set.elementAt(3)) 有重复异常
//    println(set.elementAt(4))  异常

    println()

    println(set.elementAtOrElse(5) { "越界了亲!!" })
    println(set.elementAtOrNull(123231) ?: "越界了亲!!")
}


fun convert(){
    val mutableListOf = mutableListOf("Derry", "Alice", "William", "Joe", "Joe")
    println(mutableListOf)
    //list -> set 去重
    println(mutableListOf.toSet())
    println()

    //list-> set -> list
    println(mutableListOf.toSet().toList())

    // distinct 函数 去重
    println(mutableListOf.distinct())

}

/**
 * 数组相关操作
 */
fun arrayDemo() {
    val intArray = intArrayOf(1, 2, 3, 4)
    println(intArray[0])

    println(intArray.elementAtOrElse(100){-1})
    println(intArray.elementAtOrNull(100) ?: "越界了")

    val charArray = listOf('A', 'B', 'C').toCharArray()
    println(charArray)

}

fun operationList(){
    val listOfNumbers = listOf(2, 3, 5, 6, 7)
    val size = listOfNumbers.size // 以屬性取得 List 的大小
    val sum = listOfNumbers.sum() // 計算出 List 裡所有數字的總合
    val average = listOfNumbers.average() // 計算出 List 裡所有數字的平均值
    val min = listOfNumbers.minOrNull() // 取出 List 裡的最小值或 Null
    val max = listOfNumbers.maxOrNull() // 取出 List 裡的最大值或 Null
}



